Продолжаем Шаг 20 - Некоторые особенности синтаксиса формул.
Функции даты и времени
Мы уже рассмотрели функции форматирования значений даты/времени. Однако по своей сущности, тип данных дата/время – числовой, что подразумевает некоторые арифметические операции. В Crystal Reports допустимы две таких операции:
Вычитание одной даты из другой.
Например:
{Orders.PayDate}-{Orders.OrderDate}
Возвращает разницу (в днях) между
датой оплаты и датой заказа
Сложение даты с целым числом
Возвращает дату, отстоящую от исходной на число дней, определенное числом. Это число может быть как положительным, так и отрицательным.
Формулы If-Then-Else
Людям, мало-мальски знакомым с программированием нет смысла объяснять предназначение этой формулы. В Crystal Reports ее синтаксис таков:
If <проверка> Then <результат для true> Else <выражение для false>
Ключевое слово Else и выражение для него необязательны. Тестовая часть формулы использует операторы сравнения. Для создания сложных условий проверки можно одновременно использовать несколько операторов, объединенных булевыми операторами And, Or и Not.
If IsNull({Orders.Pay}) Then
“Не оплачено”
Else
{Orders.Pay}
Для того, чтобы формула работала, необходимо привести выражения к одинаковому типу:
Так правильно:
If IsNull({Orders.Pay}) Then
“Не оплачено”
Else
ToText({Orders.Pay},”#0.00”)
Бывает, что внутри секций формулы необходимо выполнить несколько операторов. В таком случае группу операторов необходимо заключить в круглые скобки.
Формулы «контролирующие» поля БД
Бывает, что для каких-либо действий необходимо знать значение предыдущего или следующего поля БД. Для этого Crystal Reports содержит специальные функции Previous(fld) и Next(fld).
Пример:
If {Persons.LName}=Previous({Persons.LName}) Then
“ -----/------ “
Else
{Persons.LName}
Эта формула подавляет повторение фамилий в отчете
Область действия переменных
Основная идея применения переменных заключается в сохранении информации во время обработки отчета. Бывает необходимо уточнить, как долго и где будет хранится переменная. Для этого при объявлении переменной можно указать область ее действия
Local (локальная) Переменная действует только внутри формулы, в которой она объявлена Global (глобальная) Переменная действует во всем главном отчете. Можно объявить глобальную переменную в одной формуле и использовать ее значение в другой. Однако глобальные переменные не видны в подотчетах. Shared (общая) Переменная действует не только в главном отчете, но и в формулах подотчетов.
Примеры:
Local NumberVar Bonus; Global StringVar BonusName; Shared DateVar BonusDate;
По умолчанию, если не указано ключевое слово области действия, область действия переменной - Global